Ссылки по теме

*   [Устранение часто встречающихся неполадок](/index.php/%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B0%D1%81%D1%82%D0%BE_%D0%B2%D1%81%D1%82%D1%80%D0%B5%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F_%D0%BD%D0%B5%D0%BF%D0%BE%D0%BB%D0%B0%D0%B4%D0%BE%D0%BA "Устранение часто встречающихся неполадок")
*   [Ядра](/index.php/%D0%AF%D0%B4%D1%80%D0%B0 "Ядра")
*   [Параметры ядра](/index.php/%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B_%D1%8F%D0%B4%D1%80%D0%B0 "Параметры ядра")
*   [Compile kernel module](/index.php/Compile_kernel_module "Compile kernel module")

**Состояние перевода:** На этой странице представлен перевод статьи [Kernel modules](/index.php/Kernel_modules "Kernel modules"). Дата последней синхронизации: 2015-07-29\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Kernel_modules&diff=0&oldid=388445).

[Модули ядра](https://en.wikipedia.org/wiki/ru:%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D0%BC%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_%D1%8F%D0%B4%D1%80%D0%B0 "wikipedia:ru:Загружаемый модуль ядра") — это отдельные кусочки кода, которые могут быть загружены и выгружены из ядра по мере необходимости. Они расширяют функциональность ядра без необходимости перезагрузки системы.

## Contents

*   [1 Обзор](#.D0.9E.D0.B1.D0.B7.D0.BE.D1.80)
*   [2 Получение информации](#.D0.9F.D0.BE.D0.BB.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.B8)
*   [3 Автоматическое управление модулями](#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B5_.D1.83.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.8F.D0.BC.D0.B8)
*   [4 Управление модулями вручную](#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.8F.D0.BC.D0.B8_.D0.B2.D1.80.D1.83.D1.87.D0.BD.D1.83.D1.8E)
*   [5 Настройка параметров модуля](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D0.BE.D0.B2_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.8F)
    *   [5.1 С помощью файлов в /etc/modprobe.d/](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D0.B2_.2Fetc.2Fmodprobe.d.2F)
    *   [5.2 С помощью командной строки ядра](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4.D0.BD.D0.BE.D0.B9_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B8_.D1.8F.D0.B4.D1.80.D0.B0)
*   [6 Создание псевдонимов](#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D1.81.D0.B5.D0.B2.D0.B4.D0.BE.D0.BD.D0.B8.D0.BC.D0.BE.D0.B2)
*   [7 Запрет загрузки](#.D0.97.D0.B0.D0.BF.D1.80.D0.B5.D1.82_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B8)
    *   [7.1 С помощью файлов в /etc/modprobe.d/](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2_.D0.B2_.2Fetc.2Fmodprobe.d.2F_2)
    *   [7.2 С помощью командной строки ядра](#.D0.A1_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4.D0.BD.D0.BE.D0.B9_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B8_.D1.8F.D0.B4.D1.80.D0.B0_2)
*   [8 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC)
    *   [8.1 Модули не загружаются](#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D0.B8_.D0.BD.D0.B5_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B6.D0.B0.D1.8E.D1.82.D1.81.D1.8F)
*   [9 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)

## Обзор

Чтобы создать модуль ядра, вы можете прочитать [The Linux Kernel Module Programming Guide](http://tldp.org/LDP/lkmpg/2.6/html/index.html). Модуль можно сконфигурировать как вкомпилированный, а можно как загружаемый. Чтобы иметь возможность динамически загружать или выгружать модуль, его необходимо сконфигурировать как загружаемый модуль в настройке ядра (в этом случае строка, относящаяся к модулю должна быть отмечена буквой `M`).

Модули хранятся в `/usr/lib/modules/*kernel_release*`. Чтобы узнать текущую версию вашего ядра, используйте команду `uname -r`.

**Примечание:** Часто в названии модулей используются подчёркивания (`_`) или дефисы (`-`); однако, эти символы взаимозаменяемы как при использовании команды `modprobe`, так и в конфигурационных файлах в `/etc/modprobe.d/`.

## Получение информации

Чтобы узнать, какие модули ядра загружены в настоящий момент:

```
$ lsmod

```

Чтобы показать информацию о модуле:

```
$ modinfo *module_name*

```

Чтобы вывести список опций, с которыми загружен модуль:

```
$ systool -v -m *module_name*

```

Чтобы отобразить настройки для всех модулей:

```
$ modprobe -c | less

```

Чтобы отобразить настройки для отдельного модуля:

```
$ modprobe -c | grep *module_name*

```

Чтобы узнать зависимости модуля (или его псевдонима), включая сам модуль:

```
$ modprobe --show-depends *module_name*

```

## Автоматическое управление модулями

Сегодня все необходимые загрузки модулей делаются автоматически с помощью [udev](/index.php/Udev_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Udev (Русский)"), поэтому если вам не нужно загружать какие-либо модули, не входящие в стандартное ядро, вам не придётся прописывать модули, требующиеся для загрузки в каком-либо конфигурационном файле. Однако, бывают случаи, когда вам необходимо загружать свой модуль в процессе загрузки или наоборот не загружать какой-то стандартный модуль, чтобы ваш компьютер правильно функционировал.

Чтобы дополнительные модули ядра загружались автоматически в процессе загрузки, создаются статические списки в конфигурационных файлах в директории `/etc/modules-load.d/`. Каждый конфигурационный файл называется по схеме `/etc/modules-load.d/<program>.conf`. Эти конфигурационные файлы содержат список названий модулей ядра, которые необходимо грузить, разделённых переносом строки. Пустые строки и строки, в которых первым непробельным символом является `#` или `;`, игнорируются.

 `/etc/modules-load.d/virtio-net.conf` 
```
# Load virtio-net.ko at boot
virtio-net
```

Смотрите [modules-load.d(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/modules-load.d.5) для дополнительной информации.

## Управление модулями вручную

Управление модулями ядра производится с помощью утилит, предоставляемых пакетом [kmod](https://www.archlinux.org/packages/?name=kmod). Вы можете использовать эти утилиты вручную.

**Примечание:** Если вы обновили ваше ядро, но ещё не перезагрузились, *modprobe* не сработает без каких либо уведомлений об ошибках и завершится с ошибкой 1, потому что путь `/lib/modules/$(uname -r)/` больше не существует. Проверьте вручную существование этого пути, если *modprobe* не работает, чтобы убедиться, что это ваш случай.

Загрузка модуля:

```
# modprobe *module_name*

```

Загрузка модуля из другого места (для тех модулей, которых нет в `/lib/modules/$(uname -r)/`):

```
# insmod filename [args]

```

Выгрузка модуля:

```
# modprobe -r *module_name*

```

Альтернативный вариант выгрузки модуля:

```
# rmmod *module_name*

```

## Настройка параметров модуля

Чтобы передать параметр модулю ядра, вы можете воспользоваться конфигурационным файлом в modprobe или использовать командную строку ядра.

### С помощью файлов в /etc/modprobe.d/

Файлы в директории `/etc/modprobe.d/` можно использовать для передачи настроек модуля в [udev](/index.php/Udev_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Udev (Русский)"), который через `modprobe` управляет загрузкой модулей во время загрузки системы. Конфигурационные файлы в этой директории могут иметь любое имя, оканчивающееся расширением `.conf`. Синтаксис следующий:

 `/etc/modprobe.d/myfilename.conf`  `options modname parametername=parametervalue` 

Например:

 `/etc/modprobe.d/thinkfan.conf` 
```
# On ThinkPads, this lets the 'thinkfan' daemon control fan speed
options thinkpad_acpi fan_control=1
```

**Примечание:** Если какой-либо из затрагиваемых модулей загружается из initramfs, тогда вам придётся добавить соответствующий `.conf` файл в `FILES` в файле `/etc/[mkinitcpio.conf](/index.php/Mkinitcpio_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Mkinitcpio (Русский)")` или использовать `modconf` [хук](/index.php/Mkinitcpio.conf#HOOKS "Mkinitcpio.conf"), чтобы он был включен в initramfs.

### С помощью командной строки ядра

Если модуль вкомпилирован в ядро, вы также можете передать параметры модулю с помощью командной строки ядра. Для всех стандартных загрузчиков, подойдёт следующий синтаксис:

```
modname.parametername=parametercontents

```

Например:

```
thinkpad_acpi.fan_control=1

```

Просто добавьте это в загрузчике в строку с ядром, как описано в [параметрах ядра](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)").

## Создание псевдонимов

Псевдонимы (алиасы) - это альтернативные названия для модуля. Например: `alias my-mod really_long_modulename` означает, что вы можете использовать `modprobe my-mod` вместо `modprobe really_long_modulename`. Вы также можете использовать звёздочки в стиле shell, то есть `alias my-mod* really_long_modulename` будет иметь тот же эффект, что и `modprobe my-mod-something`. Создайте алиас:

 `/etc/modprobe.d/myalias.conf`  `alias mymod really_long_module_name` 

У некоторых модулей есть алиасы, которые используются для их автоматической загрузки, когда они потребуются определённой программе. Отключение этих алиасов может предотвратить их автоматическую загрузку, при этом остаётся возможность из загрузки вручную.

 `/etc/modprobe.d/modprobe.conf` 
```
# Prevent Bluetooth autoload
alias net-pf-31 off
```

## Запрет загрузки

В терминах модулей ядра blacklisting означает механизм, предотвращающий загрузку какого-то модуля. Это может понадобиться, например если вам не нужна работа какого-то оборудования или если загрузка данного модуля вызывает проблемы: например, могут быть два модуля ядра, которые пытаются управлять одним и тем же оборудованием, и их совместная загрузка приводит к конфликту.

Некоторые модули загружаются как часть [initramfs](/index.php/Initramfs "Initramfs"). Команда `mkinitcpio -M` напечатает все автоматически обнаруженные модули: для предотвращения initramfs от загрузки каких-то из этих модулей, занесите их в чёрный список в `/etc/modprobe.d/modprobe.conf`. Команда `mkinitcpio -v` отобразит все модули, которые необходимы некоторым хукам (например, `filesystems` хук, `block` хук и т.д.). Не забудьте добавить этот `.conf` файл в секцию `FILES` в `/etc/mkinitcpio.conf`, если вы этого ещё не сделали, пересоберите initramfs после того, как вы запретили загрузку модулей, а затем перезагрузитесь.

### С помощью файлов в /etc/modprobe.d/

Создайте `.conf` файл в `/etc/modprobe.d/` и добавьте строку для каждого модуля, который вы хотите запретить, используя ключевое слово `blacklist`. Например, если вы хотите запретить загружать модуль `pcspkr`:

 `/etc/modprobe.d/nobeep.conf` 
```
# Do not load the 'pcspkr' module on boot.
blacklist pcspkr
```

**Примечание:** Команда `blacklist` запретит автоматическую загрузку модуля, но этот модуль всё равно может загрузиться, если от него зависит какой-то не запрещённый модуль или если он загружен вручную.

Можно изменить такое поведение. Команда `install` заставляет modprobe запускать вашу собственную команду вместо вставки модуля в ядро как обычно. Поэтому вы можете насильно сделать так, чтобы модуль никогда не загружался:

 `/etc/modprobe.d/blacklist.conf` 
```
...
install *module_name* /bin/false
...
```
Это запретит данный модуль и все модули, зависящие от него.

### С помощью командной строки ядра

**Совет:** Это может очень помочь, если неправильный модуль не даёт загрузиться вашей системе.

Вы также можете запрещать модули из загрузчика.

Просто добавьте `modprobe.blacklist=modname1,modname2,modname3` в вашем загрузчике в строку ядра, как описано в [параметрах ядра](/index.php/Kernel_parameters_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Kernel parameters (Русский)").

**Примечание:** Когда вы запрещаете несколько модулей, обратите внимание, что они разделяются только запятой. Пробелы или что-либо ещё могут нарушить синтаксис.

## Решение проблем

### Модули не загружаются

В случае, если конкретный модуль не загружается и журнал загрузки (доступный с помощью `journalctl -b`) говорит, что модуль в чёрном списке, но в директории `/etc/modprobe.d/` нет соответствующей записи, проверьте другую папку-источник modprobe в `/usr/lib/modprobe.d/` на записи в чёрном списке.

## Смотрите также

*   [Отключение PC Speaker](/index.php/%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_PC_Speaker "Отключение PC Speaker")